import os
import socket
import time

host = '192.168.1.218'
sport = '5060'

# 创建socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 进行socekt配置，使其支持端口复用，否则发送方绑定5066，则无法使用该端口进行接收
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(('172.31.225.112', 5066))

try:
    port = int(sport)
except ValueError:
    port = socket.getservbyname(sport, 'udp')
s.connect((host, port))

# 获取当前路径，并读取当前目录下的reg.msg文件内，作为发送的data。
# 本例子中的reg.msg为完整的REGISTER消息
path = os.getcwd()
file = os.path.join(path, 'reg.msg')

# 由于python在进行明文读取，默认会将回车换行强制转换为/n，为了防止sip server解析错误，
# 在读取时增加了newline参数，并设置为空，则不进行转换，windows下读取为/r/n
with open(file, "r+", newline='') as sm:
    data = sm.read()

# 进行循环收发，需要将reg.msg中的[users]字段替换为1001-1005
for i in range(1001, 1006):
    data = data.replace(r"[users]", str(i))
    print(data)
    s.sendall(data.encode(encoding='utf-8'))
    while 1:
        buf = s.recv(2048)
        print(buf.decode('utf-8'))
        break
    time.sleep(1)